9.5 小结

  • Go Web服务器本身是并发的,服务器会把接收到的每条请求都放到独立的goroutine里运行。
  • 并发和并行是两个相辅相成的概念,但它们并不相同。并发指的是两个或多个任务在同一时间段内启动、运行和结束,并且这些任务可能会彼此互动,而并行则是单纯地同时运行多个任务。
  • Go通过goroutine和通道这两个重要的特性直接支持并发,但Go并不直接支持并行。
  • goroutine用于编写并发程序,而通道则用于为不同的goroutine之间提供通信功能。
  • 无缓冲通道都是同步的,尝试向一个已经包含数据的无缓冲通道推入新的数据将被阻塞;但是,有缓冲通道在被填满之前都是异步的。
  • select 语句可以以先到先服务的方式,从多个通道里选出一个已经准备好执行接收操作的通道。
  • WaitGroup 同样可以用于对多个通道进行同步。
  • 并发程序的性能一般都会比相应的非并发程序要高,而具体提升多少则取决于所使用的算法(即使在只使用一个CPU的情况下,也是如此)。
  • 在条件允许的情况下,并发的Web应用将自动地获得并行带来的优势。

[1] 原书说Go 1.4 goroutine 的启动栈大小为8 KB,但根据资料,这个栈的大小应该是2 KB才对,所以在译文里面进行了修正。(资料链接:https://golang.org/doc/go1.4#runtime。)——译者注

results matching ""

    No results matching ""